// const selectFiles = async (e: any) => {
//     if (!e.target?.files.length) {
//         return
//     }
//     fileList.value = fileList.value.concat([...e.target?.files])
//     const chunks = splitChunks(fileList.value[0])
//     filehash.value = await setFileHash(fileList.value[0])
//     const valid = await validateFile()
//     if (valid.data.isExist) {
//         NotifyError('该文件已经上传，请勿重复上传。')
//         return
//     }
//     //valid.data.existsFiles为已经上传的分片
//     uploadChunks(chunks, valid.data.existsFiles)

// }

// //大文件上传：1.文件分片
// const CHUNK_SIZE = 1024 * 1024 //1MB
// const fileName = ref('')
// const splitChunks = (file: File) => {
//     let start = 0
//     let chunks = []
//     fileName.value = file.name
//     while (start < file.size) {
//         chunks.push(file.slice(start, start + CHUNK_SIZE))
//         start += CHUNK_SIZE
//     }
//     return chunks
// }
// //2.计算文件hash值
// const setFileHash = (file: File) => {
//     return new Promise<string>((resolve) => {
//         const fileReader = new FileReader()
//         fileReader.readAsArrayBuffer(file)
//         fileReader.onload = (e) => {
//             const hash = new SparkMd5.ArrayBuffer()
//             hash.append(e.target?.result as ArrayBuffer)
//             resolve(hash.end())
//         }
//     })
// }
// //3.文件上传
// const uploadChunks = async (chunks: Array<Blob>, existsFiles: string[]) => {
//     const requests = chunks.map((chunk, index) => ({
//         fileHash: filehash.value,
//         chunkHash: filehash.value + '-' + index,
//         chunk
//     })).filter(item => !existsFiles.includes(item.chunkHash)) //过滤掉已经上传的分片
//         .map(file => {
//             const formData = new FormData()
//             formData.append('file', file.chunk)
//             formData.append('fileHash', file.fileHash)
//             formData.append('chunkHash', file.chunkHash)
//             return formData
//         }).map(formData => () => {
//             return fetch('http://localhost:3000/upload', {
//                 method: 'POST',
//                 body: formData,
//                 mode: 'no-cors'
//             })
//         })
//     concurrentRequest(requests, 6).then(res => {
//         //文件合并
//         mergeFile()
//     })

// }
// //4.控制并发上传个数,google同时最多6个请求
// const concurrentRequest = (requests: Array<() => Promise<Response>>, maxCount: number) => {
//     return new Promise((resolve, rejects) => {
//         if (requests.length == 0) {
//             resolve([])
//             return
//         }

//         let response: Response[] = []
//         //已经执行的函数数量
//         let index = 0
//         //已经执行完的函数数量
//         let count = 0
//         const upload = () => {
//             if (index == requests.length) {
//                 return
//             }
//             const fn = requests[index]
//             index++
//             fn().then(res => {
//                 response[index] = res
//             }).catch(err => {
//                 response[index] = err
//             }).finally(() => {
//                 count++
//                 if (count == requests.length) {
//                     resolve(response)
//                     return
//                 }
//                 upload()
//             })
//         }

//         let concurrents = Math.min(maxCount, requests.length)
//         for (let i = 0; i < concurrents; i++) {
//             upload()
//         }
//     })
// }
// //5.文件合并
// const mergeFile = () => {
//     fetch('http://localhost:3000/merge', {
//         method: 'POST',
//         //设置请求头后不允许设置mode为跨域
//         headers: {
//             'Content-Type': 'application/json'
//         },
//         body: JSON.stringify({
//             fileHash: filehash.value,
//             fileName: fileName.value
//         }),
//     })
// }
// //6.校验文件是否存在服务器，存在就不上传
// const validateFile = () => {
//     return new Promise<{ code: string, message: string, data: any }>((resolve, reject) => {
//         fetch('http://localhost:3000/validate', {
//             method: 'POST',
//             //设置请求头后不允许设置mode为跨域
//             headers: {
//                 'Content-Type': 'application/json'
//             },
//             body: JSON.stringify({
//                 fileHash: filehash.value,
//                 fileName: fileName.value
//             }),
//         }).then(res => {
//             res.json().then(res => {
//                 resolve(res)
//             })
//         })
//     })
// }